package com.cxs.shopstore.utils;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;


/*
 * @Author:cxs
 * @Date:2021/4/30  16:58
 * @Version 1.0
 * mybatisplus代码自动生成类
 * */
public class AutoCodegenerator {
    public static void main(String[] args) {
        //构建一个生成器对象,Mybatis中的对象
        AutoGenerator mpg = new AutoGenerator();
        //1.全局配置
        GlobalConfig gc = new GlobalConfig();  //创建全局配置对象
        //获取文件路径
        String projectPath = System.getProperty("user.dir");
        //设置代码生成路径
        gc.setOutputDir(projectPath + "/src/main/java");
        //配置作者
        gc.setAuthor("cxs");
        //是否打开资源管理器
        gc.setOpen(false);
        //是否覆盖
        gc.setFileOverride(false);
        //设置生成的service命名规则，及所有Service均以表明开头，Service结尾
        gc.setServiceName("%sService");
        //设置生成的Mapper命名规则，及所有Mapper均以表明开头，Mapper结尾
        gc.setMapperName("%sMapper");
        //设置生成的service实现类命名规则，及所有Service实现类均以表明开头，Service实现类结尾
        gc.setServiceImplName("%sServiceImple");
        //设置生成的Controller命名规则，及所有Controller均以表明开头，Controller结尾
        gc.setControllerName("%sController");
        //配置主键id策略
        gc.setIdType(IdType.ID_WORKER_STR);
        gc.setSwagger2(true);
        mpg.setGlobalConfig(gc);

        //2.数据源配置
        DataSourceConfig dbconf = new DataSourceConfig();
        dbconf.setUrl("jdbc:mysql://127.0.0.1:3306/springbootdb");
        dbconf.setUsername("root");
        dbconf.setPassword("root");
        dbconf.setDriverName("com.mysql.jdbc.Driver");
        //设置数据库类型
        dbconf.setDbType(DbType.MYSQL);
        mpg.setDataSource(dbconf);

        //3.包的信息
        PackageConfig pcg = new PackageConfig();
        //设置父包名
        pcg.setParent("com.cxs.shopstore");
        //设置模块名
        pcg.setEntity("models");
        pcg.setMapper("mapper");
        pcg.setService("service");
        pcg.setController("controllers");
        mpg.setPackageInfo(pcg);

        // 4.策略配置
        StrategyConfig strategy = new StrategyConfig();
        //设置映射的表名，可以传多个
        strategy.setInclude("shop_good");
        //设置命名规则，下划线转驼峰
        strategy.setNaming(NamingStrategy.underline_to_camel);
        //设置列命名规则，下划线转驼峰
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //是否使用lombok注解，开启链式编程
        strategy.setEntityLombokModel(true);
        //去掉表前缀
        strategy.setTablePrefix("shop_");
        strategy.setRestControllerStyle(true);
        strategy.setControllerMappingHyphenStyle(true);
        mpg.setStrategy(strategy);
        mpg.execute();  //执行
    }
}
